/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package economicocontrol.dao.entity;

import economicocontrol.Constante.Constante;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author iMac
 */
@Entity
@Table(name = "registro_entrada_salida")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "RegistroEntradaSalida.findAll", query = "SELECT r FROM RegistroEntradaSalida r"),
    @NamedQuery(name = "RegistroEntradaSalida.findByIdRegistroKilometraje", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.idRegistroKilometraje = :idRegistroKilometraje"),
    @NamedQuery(name = "RegistroEntradaSalida.findByFechaEntrada", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.fechaEntrada = :fechaEntrada"),
    @NamedQuery(name = "RegistroEntradaSalida.findByFechaSalida", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.fechaSalida = :fechaSalida"),
    @NamedQuery(name = "RegistroEntradaSalida.findByHorasalida", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.horasalida = :horasalida"),
    @NamedQuery(name = "RegistroEntradaSalida.findByHoraEntrada", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.horaEntrada = :horaEntrada"),
    @NamedQuery(name = "RegistroEntradaSalida.findByKilometrajeSalida", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.kilometrajeSalida = :kilometrajeSalida"),
    @NamedQuery(name = "RegistroEntradaSalida.findByKilometrajeEntrada", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.kilometrajeEntrada = :kilometrajeEntrada"),
    @NamedQuery(name = "RegistroEntradaSalida.findByDiaDeSemanaSalida", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.diaDeSemanaSalida = :diaDeSemanaSalida"),
    @NamedQuery(name = "RegistroEntradaSalida.findByDiaDeSemanaEntrada", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.diaDeSemanaEntrada = :diaDeSemanaEntrada"),
    @NamedQuery(name = "RegistroEntradaSalida.findByIdEconomicos", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.registroDepartamentosIdRegistroDepartamento = :registroDepartamentosIdRegistroDepartamento"),
    @NamedQuery(name = "RegistroEntradaSalida.idMax", query = "SELECT max(r.idRegistroKilometraje) FROM RegistroEntradaSalida r "),
    @NamedQuery(name = "RegistroEntradaSalida.idEconomico", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.registroEconomicosideconomicos.idEconomicos = :ideconomico and r.estatusEntradaSalidaidEstatus.idEstatus="+Constante.STATUS_ENTRADA_SALIDA_ABIERTO),
    @NamedQuery(name = "RegistroEntradaSalida.intevaloFecha", query = "SELECT r FROM RegistroEntradaSalida r WHERE r.registroPersonalidRegistroPersonal.idRegistroPersonal = :idPersanal and r.fechaSalida>=:fechaSalida and r.fechaEntrada<=:fechaEntrada order by r.fechaEntrada desc"),
    //and DAYOFWEEK(r.fechaSalida)=DAYOFWEEK(:fechaSalida) and DAYOFWEEK(r.fechaEntrada)=DAYOFWEEK(:fechaEntrada) avg(r.kilometrajeEntrada-r.kilometrajeSalida)
    @NamedQuery(name = "RegistroEntradaSalida.promKmFechaSalidaEntradaPersonal", query = "SELECT avg((r.kilometrajeEntrada-r.kilometrajeSalida)/((r.fechaEntrada-r.fechaSalida)+1)) FROM RegistroEntradaSalida r WHERE r.registroPersonalidRegistroPersonal.idRegistroPersonal = :idPersanal and (r.diaDeSemanaSalida>=:diaDeSemanaSalida or r.diaDeSemanaEntrada<=:diaDeSemanaEntrada) and (r.fechaEntrada-r.fechaSalida+1)<=:numDias and r.estatusEntradaSalidaidEstatus.idEstatus="+Constante.STATUS_ENTRADA_SALIDA_CERRADO),
    @NamedQuery(name = "RegistroEntradaSalida.promKmFechaSalidaEntradaEconomico", query = "SELECT avg((r.kilometrajeEntrada-r.kilometrajeSalida)/((r.fechaEntrada-r.fechaSalida)+1)) FROM RegistroEntradaSalida r WHERE r.registroEconomicosideconomicos.idEconomicos = :idEconomico and (r.diaDeSemanaSalida>=:diaDeSemanaSalida or r.diaDeSemanaEntrada<=:diaDeSemanaEntrada) and (r.fechaEntrada-r.fechaSalida+1)<=:numDias and r.estatusEntradaSalidaidEstatus.idEstatus="+Constante.STATUS_ENTRADA_SALIDA_CERRADO),
    @NamedQuery(name = "RegistroEntradaSalida.listKmEntrada", query = "SELECT r.kilometrajeEntrada FROM RegistroEntradaSalida r WHERE r.registroEconomicosideconomicos.idEconomicos = :idEconomico and r.estatusEntradaSalidaidEstatus.idEstatus="+Constante.STATUS_ENTRADA_SALIDA_CERRADO+" order by r.fechaEntrada desc")
})
public class RegistroEntradaSalida implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "idRegistro_Kilometraje")
    private Integer idRegistroKilometraje;
    @Column(name = "Fecha_Entrada")
    @Temporal(TemporalType.DATE)
    private Date fechaEntrada;
    @Column(name = "Fecha_Salida")
    @Temporal(TemporalType.DATE)
    private Date fechaSalida;
    @Column(name = "Hora_salida")
    @Temporal(TemporalType.TIME)
    private Date horasalida;
    @Column(name = "Hora_Entrada")
    @Temporal(TemporalType.TIME)
    private Date horaEntrada;
    @Column(name = "Kilometraje_Salida")
    private Integer kilometrajeSalida;
    @Column(name = "Kilometraje_Entrada")
    private Integer kilometrajeEntrada;
    @Column(name = "dia_De_Semana_Salida")
    private Integer diaDeSemanaSalida;
    @Column(name = "dia_De_Semana_Entrada")
    private Integer diaDeSemanaEntrada;
    @JoinColumn(name = "Registro_Departamentos_Id_RegistroDepartamento", referencedColumnName = "Id_RegistroDepartamento")
    @ManyToOne(optional = false)
    private RegistroDepartamentos registroDepartamentosIdRegistroDepartamento;
    @JoinColumn(name = "Registro_Economicos_id_economicos", referencedColumnName = "id_economicos")
    @ManyToOne(optional = false)
    private RegistroEconomicos registroEconomicosideconomicos;
    @JoinColumn(name = "Registro_Personal_idRegistro_Personal", referencedColumnName = "idRegistro_Personal")
    @ManyToOne(optional = false)
    private RegistroPersonal registroPersonalidRegistroPersonal;
    @JoinColumn(name = "Estatus_Entrada_Salida_idEstatus", referencedColumnName = "idEstatus")
    @ManyToOne(optional = false)
    private EstatusEntradaSalida estatusEntradaSalidaidEstatus;

    public RegistroEntradaSalida() {
    }

    public RegistroEntradaSalida(Integer idRegistroKilometraje) {
        this.idRegistroKilometraje = idRegistroKilometraje;
    }

    public Integer getIdRegistroKilometraje() {
        return idRegistroKilometraje;
    }

    public void setIdRegistroKilometraje(Integer idRegistroKilometraje) {
        this.idRegistroKilometraje = idRegistroKilometraje;
    }

    public Date getFechaEntrada() {
        return fechaEntrada;
    }

    public void setFechaEntrada(Date fechaEntrada) {
        this.fechaEntrada = fechaEntrada;
    }

    public Date getFechaSalida() {
        return fechaSalida;
    }

    public void setFechaSalida(Date fechaSalida) {
        this.fechaSalida = fechaSalida;
    }

    public Date getHorasalida() {
        return horasalida;
    }

    public void setHorasalida(Date horasalida) {
        this.horasalida = horasalida;
    }

    public Date getHoraEntrada() {
        return horaEntrada;
    }

    public void setHoraEntrada(Date horaEntrada) {
        this.horaEntrada = horaEntrada;
    }

    public Integer getKilometrajeSalida() {
        return kilometrajeSalida;
    }

    public void setKilometrajeSalida(Integer kilometrajeSalida) {
        this.kilometrajeSalida = kilometrajeSalida;
    }

    public Integer getKilometrajeEntrada() {
        return kilometrajeEntrada;
    }

    public void setKilometrajeEntrada(Integer kilometrajeEntrada) {
        this.kilometrajeEntrada = kilometrajeEntrada;
    }

    public Integer getDiaDeSemanaSalida() {
        return diaDeSemanaSalida;
    }

    public void setDiaDeSemanaSalida(Integer diaDeSemanaSalida) {
        this.diaDeSemanaSalida = diaDeSemanaSalida;
    }

    public Integer getDiaDeSemanaEntrada() {
        return diaDeSemanaEntrada;
    }

    public void setDiaDeSemanaEntrada(Integer diaDeSemanaEntrada) {
        this.diaDeSemanaEntrada = diaDeSemanaEntrada;
    }

    public RegistroDepartamentos getRegistroDepartamentosIdRegistroDepartamento() {
        return registroDepartamentosIdRegistroDepartamento;
    }

    public void setRegistroDepartamentosIdRegistroDepartamento(RegistroDepartamentos registroDepartamentosIdRegistroDepartamento) {
        this.registroDepartamentosIdRegistroDepartamento = registroDepartamentosIdRegistroDepartamento;
    }

    public RegistroEconomicos getRegistroEconomicosideconomicos() {
        return registroEconomicosideconomicos;
    }

    public void setRegistroEconomicosideconomicos(RegistroEconomicos registroEconomicosideconomicos) {
        this.registroEconomicosideconomicos = registroEconomicosideconomicos;
    }

    public RegistroPersonal getRegistroPersonalidRegistroPersonal() {
        return registroPersonalidRegistroPersonal;
    }

    public void setRegistroPersonalidRegistroPersonal(RegistroPersonal registroPersonalidRegistroPersonal) {
        this.registroPersonalidRegistroPersonal = registroPersonalidRegistroPersonal;
    }

    public EstatusEntradaSalida getEstatusEntradaSalidaidEstatus() {
        return estatusEntradaSalidaidEstatus;
    }

    public void setEstatusEntradaSalidaidEstatus(EstatusEntradaSalida estatusEntradaSalidaidEstatus) {
        this.estatusEntradaSalidaidEstatus = estatusEntradaSalidaidEstatus;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idRegistroKilometraje != null ? idRegistroKilometraje.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof RegistroEntradaSalida)) {
            return false;
        }
        RegistroEntradaSalida other = (RegistroEntradaSalida) object;
        if ((this.idRegistroKilometraje == null && other.idRegistroKilometraje != null) || (this.idRegistroKilometraje != null && !this.idRegistroKilometraje.equals(other.idRegistroKilometraje))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "economicocontrol.dao.entity.RegistroEntradaSalida[ idRegistroKilometraje=" + idRegistroKilometraje + " ]";
    }
    
}
